package pe.edu.unmsm.ocaa.workspace.presentacion.controller.procesos;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.event.SelectEvent;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.edu.unmsm.ocaa.workspace.negocio.modelo.dto.GrupoDTO;
import pe.edu.unmsm.ocaa.workspace.negocio.modelo.dto.ProgramaDTO;
import pe.edu.unmsm.ocaa.workspace.negocio.servicio.GrupoService;
import pe.edu.unmsm.ocaa.workspace.negocio.servicio.ProgramaService;
import pe.edu.unmsm.ocaa.workspace.negocio.servicio.UsuarioService;

@Controller
@Scope("view")
public class AgendaController {
	/*****************ATRIBUTOS**************/
	private List<ProgramaDTO> programas;
	private ProgramaDTO programaEditar;
	private ProgramaDTO programaSeleccionado;
	private GrupoDTO grupoCompartir;
	private GrupoDTO grupoSeleccionado;
	private Integer idGrupoSeleccionado;
	private List<GrupoDTO> resultGrupoBusq;

	@Resource
	ProgramaService programaService;
	
	@Resource
	UsuarioService usuarioService;
	
	@Resource
	GrupoService grupoService;
	
	/*****************INICIALIZACION**************/
	public AgendaController() {
		setGrupoCompartir(new GrupoDTO());
		setProgramaEditar(new ProgramaDTO());
		getProgramaEditar().setGrupos(new ArrayList<GrupoDTO>());
		setProgramaSeleccionado(new ProgramaDTO());
	}	
	@PostConstruct
	private void init(){
		setProgramas(programaService.listarProgramas());
	}
	/*****************NAVEGACION**************/
    public List<String> complete(String query) {  
    	setResultGrupoBusq(grupoService.listarGruposxLikeNom(query));
    	List<String> results = new ArrayList<String>();
    	for (GrupoDTO grupoDTO : getResultGrupoBusq()) {
			results.add(grupoDTO.getNomGrupo());
		}
        return results;  
    }  
    
    public void handleSelect(SelectEvent event) {  
    	String nick=event.getObject().toString();
    	for (GrupoDTO grupoDTO : getResultGrupoBusq()) {
			if (grupoDTO.getNomGrupo().equals(nick))
				setGrupoCompartir(grupoDTO);
		} 
    	System.out.println("grupo seleccionado "+getGrupoCompartir().getIdGrupo()+getGrupoCompartir().getNomGrupo());
    }  
    
    public void anadirGrupo(ActionEvent ev){
    	getProgramaEditar().getGrupos().add(getGrupoCompartir());
    	setGrupoCompartir(new GrupoDTO());
    }
    
    public void guardarPrograma(ActionEvent ev){
    	programaService.guardarPrograma(getProgramaEditar());
    	setProgramas(programaService.listarProgramas());
		setProgramaEditar(new ProgramaDTO());
		getProgramaEditar().setGrupos(new ArrayList<GrupoDTO>());
		FacesMessage msg = new FacesMessage("Exito"," El programa se guardo correctamente.");        
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
    
    public void nuevoPrograma(ActionEvent ev){
    	setProgramaEditar(new ProgramaDTO());
		getProgramaEditar().setGrupos(new ArrayList<GrupoDTO>());
    }
    
    public void editarPrograma(SelectEvent ev){
    	if(getProgramaSeleccionado()==null)
    	{
    		FacesMessage msg = new FacesMessage("Aviso"," Debe Seleccionar un programa primero.");        
            FacesContext.getCurrentInstance().addMessage(null, msg);
    	}
    	else
    		setProgramaEditar(programaService.obtenerPrograma(getProgramaSeleccionado().getIdPrograma()));
    }
    
    public void eliminarPrograma(ActionEvent ev){
    	if (getProgramaSeleccionado()==null)
    	{
    		FacesMessage msg = new FacesMessage("Aviso"," Debe Seleccionar un programa primero.");        
            FacesContext.getCurrentInstance().addMessage(null, msg);
    	}
    	else
    	{
    		programaService.eliminarPrograma(getProgramaSeleccionado().getIdPrograma());
    		setProgramas(programaService.listarProgramas());
    	}
    }
    
    public void eliminarGrupoSeleccionado(){
    	List<GrupoDTO> listg=getProgramaEditar().getGrupos();
    	for (int i=0; i< listg.size();i++) {
    		GrupoDTO grupoDTO=listg.get(i);
			if(grupoDTO.getIdGrupo().equals(getGrupoSeleccionado().getIdGrupo()))
				listg.remove(i);
		}
    }
	/*****************GETTERS AND SETTERS**************/
	public List<ProgramaDTO> getProgramas() {
		return programas;
	}

	public void setProgramas(List<ProgramaDTO> programas) {
		this.programas = programas;
	}
	public ProgramaDTO getProgramaEditar() {
		return programaEditar;
	}
	public void setProgramaEditar(ProgramaDTO programaEditar) {
		this.programaEditar = programaEditar;
	}
	public ProgramaDTO getProgramaSeleccionado() {
		return programaSeleccionado;
	}
	public void setProgramaSeleccionado(ProgramaDTO programaSeleccionado) {
		this.programaSeleccionado = programaSeleccionado;
	}
	public GrupoDTO getGrupoCompartir() {
		return grupoCompartir;
	}
	public void setGrupoCompartir(GrupoDTO grupoCompartir) {
		this.grupoCompartir = grupoCompartir;
	}
	public List<GrupoDTO> getResultGrupoBusq() {
		return resultGrupoBusq;
	}
	public void setResultGrupoBusq(List<GrupoDTO> resultGrupoBusq) {
		this.resultGrupoBusq = resultGrupoBusq;
	}
	public GrupoDTO getGrupoSeleccionado() {
		return grupoSeleccionado;
	}
	public void setGrupoSeleccionado(GrupoDTO grupoSeleccionado) {
		this.grupoSeleccionado = grupoSeleccionado;
	}
	public Integer getIdGrupoSeleccionado() {
		return idGrupoSeleccionado;
	}
	public void setIdGrupoSeleccionado(Integer idGrupoSeleccionado) {
		this.idGrupoSeleccionado = idGrupoSeleccionado;
	}
}
